int p[8]={11,12,13,14,15,16,17,18},i=0,j=0

来源:百度知道 编辑:UC知道 时间:2024/06/16 13:21:56
main()
{
int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while(i++<7) if(p[i]%2) j+=p[i];
printf("%d\n",j);
}
结果为什么不是42
请具体解释一下
谢谢
答案是45啊
而且这道题是if(p[i]%2)
也就是说在p[i]能够取余的前提下执行
应该是加奇数吧

怎么没有回答我的呢

简单嘛,我们主要来分析这条语句:while(i++<7) if(p[i]%2) j+=p[i];
开始是i初始化为0,则while(i++<7)后i变为1,所以p[0]是无法访问到的。后面if(p[i]%2) j+=p[i]; 是说如果p[i]%2为1,即条件为真时,j+=p[i]; 所以怎样才能得p[i]%2为1呢,显然只有p为奇数时即可,(不是偶数哦,偶数对2取余为0,条件变为假,就什么也不做了。)所以最后是13,15,17三个数相加,得45,嘿嘿,是吧。

while(i++<7)执行完后i++后i变成了1所以下面if(p[i]%2)里面p[i]是从p[1]开始判断的,根据代码可知道如果是奇数就相加,所以最后结果为13+15+17=45.

到i=6的时候判断i++<7(先判断i<7,ture再加1,即i=7)
此时p[7]=18,判断能整除2,所以也加进j
j=12+14+16+18=60